#include <D2DataTbls.h>
#include <DataTbls/SequenceTbls.h>
#include <D2BitManip.h>
#include <Units/Units.h>
#include <D2Skills.h>
#include <D2Composit.h>

//D2Common.0x6FDDE6A8
D2AnimSeqTxt gPlayerSequenceHandToHand1[13] =
{
	{ 0, PLRMODE_ATTACK1, 0, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 1, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 2, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 3, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 4, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 5, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 6, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 7, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 8, 0, ANIMSEQ_EVENT_MELEE_ATTACK },
	{ 0, PLRMODE_ATTACK1, 9, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 10, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 11, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 12, 0, ANIMSEQ_EVENT_NONE },
};

//D2Common.0x6FDDE6F8
D2AnimSeqTxt gPlayerSequenceHandToHand2[14] =
{
	{ 0, PLRMODE_ATTACK1, 0, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 1, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 2, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 3, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 4, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 5, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 6, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 7, 0, ANIMSEQ_EVENT_MELEE_ATTACK },
	{ 0, PLRMODE_ATTACK1, 8, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 9, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 10, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 11, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 12, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 13, 0, ANIMSEQ_EVENT_NONE },
};

//D2Common.0x6FDDE750
D2AnimSeqTxt gPlayerSequenceJab_BOW[18] =
{
	{ 0, PLRMODE_ATTACK1, 5, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 6, 0, ANIMSEQ_EVENT_PLAY_SOUND },
	{ 0, PLRMODE_ATTACK1, 8, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 9, 0, ANIMSEQ_EVENT_MELEE_ATTACK },
	{ 0, PLRMODE_ATTACK1, 10, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 11, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 13, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK2, 6, 0, ANIMSEQ_EVENT_PLAY_SOUND },
	{ 0, PLRMODE_ATTACK2, 8, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK2, 9, 0, ANIMSEQ_EVENT_MELEE_ATTACK },
	{ 0, PLRMODE_ATTACK1, 10, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 11, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 13, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK2, 6, 0, ANIMSEQ_EVENT_PLAY_SOUND },
	{ 0, PLRMODE_ATTACK2, 8, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK2, 9, 0, ANIMSEQ_EVENT_MELEE_ATTACK },
	{ 0, PLRMODE_ATTACK2, 10, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK2, 13, 0, ANIMSEQ_EVENT_NONE },
};

//D2Common.0x6FDDE7C0
D2AnimSeqTxt gPlayerSequenceJab_1HS[21] =
{
	{ 0, PLRMODE_ATTACK1, 2, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 7, 0, ANIMSEQ_EVENT_PLAY_SOUND },
	{ 0, PLRMODE_ATTACK1, 9, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 10, 0, ANIMSEQ_EVENT_MELEE_ATTACK },
	{ 0, PLRMODE_ATTACK1, 12, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 13, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 15, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK2, 4, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK2, 6, 0, ANIMSEQ_EVENT_PLAY_SOUND },
	{ 0, PLRMODE_ATTACK2, 9, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK2, 10, 0, ANIMSEQ_EVENT_MELEE_ATTACK },
	{ 0, PLRMODE_ATTACK1, 12, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 13, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 15, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK2, 4, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK2, 6, 0, ANIMSEQ_EVENT_PLAY_SOUND },
	{ 0, PLRMODE_ATTACK2, 9, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK2, 10, 0, ANIMSEQ_EVENT_MELEE_ATTACK },
	{ 0, PLRMODE_ATTACK2, 11, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK2, 13, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK2, 15, 0, ANIMSEQ_EVENT_NONE },
};

//D2Common.0x6FDDE840
D2PlayerWeaponSequencesStrc gPlayerWeaponsSequenceJab =
{
	gPlayerSequenceHandToHand1, 13, 13,
	gPlayerSequenceJab_BOW, 18, 18,
	gPlayerSequenceJab_1HS, 21, 21,
};

//D2Common.0x6FDDE8E8
D2AnimSeqTxt gPlayerSequenceSacrifice_1HT[7] =
{
	{ 0, PLRMODE_ATTACK2, 0, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK2, 2, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK2, 4, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK2, 7, 0, ANIMSEQ_EVENT_MELEE_ATTACK },
	{ 0, PLRMODE_ATTACK2, 8, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK2, 10, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK2, 13, 0, ANIMSEQ_EVENT_NONE },
};

//D2Common.0x6FDDE914
D2AnimSeqTxt gPlayerSequenceSacrifice_STF[8] =
{
	{ 0, PLRMODE_ATTACK1, 0, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 2, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 4, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 6, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 8, 0, ANIMSEQ_EVENT_MELEE_ATTACK },
	{ 0, PLRMODE_ATTACK1, 10, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 13, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 15, 0, ANIMSEQ_EVENT_NONE },
};

//D2Common.0x6FDDE948
D2PlayerWeaponSequencesStrc gPlayerWeaponsSequenceSacrifice =
{
	gPlayerSequenceHandToHand2, 14, 14,
	0, 0, 0,
	0, 0, 0,
	gPlayerSequenceSacrifice_1HT, 7, 7,
	gPlayerSequenceSacrifice_STF, 8, 8,
};

//D2Common.0x6FDDE9F0
D2AnimSeqTxt gPlayerSequenceChastise_1HT[16] =
{
	{ 0, PLRMODE_SPECIAL1, 3, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 4, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 5, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 6, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 7, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 8, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 10, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK2, 1, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK2, 2, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK2, 4, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK2, 6, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK2, 7, 0, ANIMSEQ_EVENT_MELEE_ATTACK },
	{ 0, PLRMODE_ATTACK2, 8, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK2, 10, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK2, 11, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK2, 13, 0, ANIMSEQ_EVENT_NONE },
};

//D2Common.0x6FDDEA50
D2PlayerWeaponSequencesStrc gPlayerWeaponsSequenceChastise =
{
	gPlayerSequenceHandToHand2, 14, 14,
	0, 0, 0,
	0, 0, 0,
	gPlayerSequenceChastise_1HT, 16, 16,
};

//D2Common.0x6FDDEAF8
D2AnimSeqTxt gPlayerSequenceCharge[15] =
{
	{ 0, PLRMODE_RUN, 0, 0, ANIMSEQ_EVENT_MELEE_ATTACK },
	{ 0, PLRMODE_RUN, 1, 0, ANIMSEQ_EVENT_MELEE_ATTACK },
	{ 0, PLRMODE_RUN, 2, 0, ANIMSEQ_EVENT_MELEE_ATTACK },
	{ 0, PLRMODE_RUN, 3, 0, ANIMSEQ_EVENT_MELEE_ATTACK },
	{ 0, PLRMODE_RUN, 4, 0, ANIMSEQ_EVENT_MELEE_ATTACK },
	{ 0, PLRMODE_RUN, 5, 0, ANIMSEQ_EVENT_MELEE_ATTACK },
	{ 0, PLRMODE_RUN, 6, 0, ANIMSEQ_EVENT_MELEE_ATTACK },
	{ 0, PLRMODE_RUN, 7, 0, ANIMSEQ_EVENT_MELEE_ATTACK },
	{ 0, PLRMODE_ATTACK1, 1, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 4, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 5, 0, ANIMSEQ_EVENT_PLAY_SOUND },
	{ 0, PLRMODE_ATTACK1, 6, 0, ANIMSEQ_EVENT_MELEE_ATTACK },
	{ 0, PLRMODE_ATTACK1, 8, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 10, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 12, 0, ANIMSEQ_EVENT_NONE },
};

//D2Common.0x6FDDEB58
D2PlayerWeaponSequencesStrc gPlayerWeaponsSequenceCharge =
{
	gPlayerSequenceCharge, 15, 15,
	gPlayerSequenceCharge, 15, 15,
	gPlayerSequenceCharge, 15, 15,
	gPlayerSequenceCharge, 15, 15,
	gPlayerSequenceCharge, 15, 15,
	0, 0, 0,
	0, 0, 0,
	gPlayerSequenceCharge, 15, 15,
};

//D2Common.0x6FDDEC00
D2AnimSeqTxt gPlayerSequenceDefiance_1HT[6] =
{
	{ 0, PLRMODE_ATTACK2, 5, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK2, 6, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK2, 7, 0, ANIMSEQ_EVENT_MELEE_ATTACK },
	{ 0, PLRMODE_ATTACK2, 8, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK2, 10, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK2, 12, 0, ANIMSEQ_EVENT_NONE },
};

//D2Common.0x6FDDEC28
D2PlayerWeaponSequencesStrc gPlayerWeaponsSequenceDefiance =
{
	gPlayerSequenceHandToHand2, 14, 14,
	0, 0, 0,
	0, 0, 0,
	gPlayerSequenceDefiance_1HT, 6, 6,
};

//D2Common.0x6FDDECD0
D2AnimSeqTxt gPlayerSequenceInferno[15] =
{
	{ 0, PLRMODE_CAST, 0, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_CAST, 1, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_CAST, 2, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_CAST, 3, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_CAST, 4, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_CAST, 5, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_CAST, 6, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_CAST, 7, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_CAST, 8, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_CAST, 9, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_CAST, 9, 0, ANIMSEQ_EVENT_MELEE_ATTACK },
	{ 0, PLRMODE_CAST, 10, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_CAST, 11, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_CAST, 12, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_CAST, 13, 0, ANIMSEQ_EVENT_NONE },
};

//D2Common.0x6FDDED30
D2PlayerWeaponSequencesStrc gPlayerWeaponsSequenceInferno =
{
	gPlayerSequenceInferno, 15, 15,
	gPlayerSequenceInferno, 15, 15,
	gPlayerSequenceInferno, 15, 15,
	gPlayerSequenceInferno, 15, 15,
	gPlayerSequenceInferno, 15, 15,
	gPlayerSequenceInferno, 15, 15,
	gPlayerSequenceInferno, 15, 15,
	gPlayerSequenceInferno, 15, 15,
	gPlayerSequenceInferno, 15, 15,
	gPlayerSequenceInferno, 15, 15,
	gPlayerSequenceInferno, 15, 15,
	gPlayerSequenceInferno, 15, 15,
	gPlayerSequenceInferno, 15, 15,
	gPlayerSequenceInferno, 15, 15,
};

//D2Common.0x6FDDEDD8
D2AnimSeqTxt gPlayerSequenceStrafe_2HS[13] =
{
	{ 0, PLRMODE_ATTACK1, 0, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 1, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 2, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 3, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 4, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 6, 0, ANIMSEQ_EVENT_MELEE_ATTACK },
	{ 0, PLRMODE_ATTACK1, 7, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 8, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 9, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 10, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 11, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 12, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 13, 0, ANIMSEQ_EVENT_NONE },
};

//D2Common.0x6FDDEE28
D2AnimSeqTxt gPlayerSequenceStrafe_2HT[20] =
{
	{ 0, PLRMODE_ATTACK1, 0, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 1, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 2, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 3, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 4, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 5, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 6, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 7, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 8, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 9, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 10, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 11, 0, ANIMSEQ_EVENT_MELEE_ATTACK },
	{ 0, PLRMODE_ATTACK1, 12, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 13, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 14, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 15, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 16, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 17, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 18, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 19, 0, ANIMSEQ_EVENT_NONE },
};

//D2Common.0x6FDDEEA0
D2PlayerWeaponSequencesStrc gPlayerWeaponsSequenceStrafe =
{
	gPlayerSequenceHandToHand1, 13, 13,
	0, 0, 0,
	0, 0, 0,
	0, 0, 0,
	0, 0, 0,
	gPlayerSequenceStrafe_2HS, 13, 13,
	gPlayerSequenceStrafe_2HT, 20, 20,
};

//D2Common.0x6FDDEF48
D2AnimSeqTxt gPlayerSequenceImpale_BOW[21] =
{
	{ 0, PLRMODE_ATTACK1, 0, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 1, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 1, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 1, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 2, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 2, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 2, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 3, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 3, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 4, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 4, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 5, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 6, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 7, 0, ANIMSEQ_EVENT_MELEE_ATTACK },
	{ 0, PLRMODE_ATTACK1, 8, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 9, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 10, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 11, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 12, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 13, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 14, 0, ANIMSEQ_EVENT_NONE },
};

//D2Common.0x6FDDEFC8
D2AnimSeqTxt gPlayerSequenceImpale_1HS[24] =
{
	{ 0, PLRMODE_ATTACK1, 0, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 1, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 1, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 1, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 2, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 2, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 2, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 3, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 3, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 4, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 4, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 5, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 6, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 7, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 8, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 9, 0, ANIMSEQ_EVENT_MELEE_ATTACK },
	{ 0, PLRMODE_ATTACK1, 10, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 11, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 12, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 13, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 14, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 15, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 16, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 17, 0, ANIMSEQ_EVENT_NONE },
};

//D2Common.0x6FDDF058
D2PlayerWeaponSequencesStrc gPlayerWeaponsSequenceImpale =
{
	gPlayerSequenceHandToHand1, 13, 13,
	gPlayerSequenceImpale_BOW, 21, 21,
	gPlayerSequenceImpale_1HS, 24, 24,
};

//D2Common.0x6FDDF100
D2AnimSeqTxt gPlayerSequenceFend_BOW[16] =
{
	{ 0, PLRMODE_ATTACK1, 0, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 1, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 2, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 3, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 4, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 5, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 6, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK2, 6, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 8, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK2, 8, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 9, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK2, 9, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 12, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK2, 12, 0, ANIMSEQ_EVENT_MELEE_ATTACK },
	{ 0, PLRMODE_ATTACK1, 13, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 14, 0, ANIMSEQ_EVENT_NONE },
};

//D2Common.0x6FDDF160
D2AnimSeqTxt gPlayerSequenceFend_1HS[16] =
{
	{ 0, PLRMODE_ATTACK1, 0, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 1, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 2, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK2, 2, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 6, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK2, 6, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 9, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK2, 9, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 12, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK2, 10, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 14, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK2, 14, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 15, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 16, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 17, 0, ANIMSEQ_EVENT_NONE },
	{ 0, 0, 0, 0, ANIMSEQ_EVENT_NONE },
};

//D2Common.0x6FDDF1C0
D2PlayerWeaponSequencesStrc gPlayerWeaponsSequenceFend =
{
	gPlayerSequenceHandToHand1, 13, 13,
	gPlayerSequenceFend_BOW, 16, 16,
	gPlayerSequenceFend_1HS, 16, 16,
};

//D2Common.0x6FDDF268
D2AnimSeqTxt gPlayerSequenceWhirlwind[8] =
{
	{ 0, PLRMODE_ATTACK1, 0, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 1, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 2, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 3, 0, ANIMSEQ_EVENT_MELEE_ATTACK },
	{ 0, PLRMODE_ATTACK1, 3, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 4, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 5, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 6, 0, ANIMSEQ_EVENT_MELEE_ATTACK },
};

//D2Common.0x6FDDF298
D2PlayerWeaponSequencesStrc gPlayerWeaponsSequenceWhirlwind =
{
	gPlayerSequenceWhirlwind, 8, 8,
	gPlayerSequenceWhirlwind, 8, 8,
	gPlayerSequenceWhirlwind, 8, 8,
	gPlayerSequenceWhirlwind, 8, 8,
	gPlayerSequenceWhirlwind, 8, 8,
	0, 0, 0,
	0, 0, 0,
	gPlayerSequenceWhirlwind, 8, 8,
	gPlayerSequenceWhirlwind, 8, 8,
	gPlayerSequenceWhirlwind, 8, 8,
	gPlayerSequenceWhirlwind, 8, 8,
	gPlayerSequenceWhirlwind, 8, 8,
	gPlayerSequenceWhirlwind, 8, 8,
	gPlayerSequenceWhirlwind, 8, 8,
};

//D2Common.0x6FDDF340
D2AnimSeqTxt gPlayerSequenceDoubleSwing[17] =
{
	{ 0, PLRMODE_ATTACK1, 1, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 2, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 4, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 6, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 7, 0, ANIMSEQ_EVENT_MELEE_ATTACK },
	{ 0, PLRMODE_ATTACK1, 9, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 11, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 13, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 14, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL3, 2, 0, ANIMSEQ_EVENT_MELEE_ATTACK },
	{ 0, PLRMODE_SPECIAL3, 4, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL3, 5, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL3, 6, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL3, 8, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL3, 9, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL3, 10, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL3, 11, 0, ANIMSEQ_EVENT_NONE },
};

//D2Common.0x6FDDF3A8
D2PlayerWeaponSequencesStrc gPlayerWeaponsSequenceDoubleSwing =
{
	gPlayerSequenceDoubleSwing, 17, 17,
	gPlayerSequenceDoubleSwing, 17, 17,
	gPlayerSequenceDoubleSwing, 17, 17,
	gPlayerSequenceDoubleSwing, 17, 17,
	gPlayerSequenceDoubleSwing, 17, 17,
	gPlayerSequenceDoubleSwing, 17, 17,
	gPlayerSequenceDoubleSwing, 17, 17,
	gPlayerSequenceDoubleSwing, 17, 17,
	gPlayerSequenceDoubleSwing, 17, 17,
	gPlayerSequenceDoubleSwing, 17, 17,
	gPlayerSequenceDoubleSwing, 17, 17,
	gPlayerSequenceDoubleSwing, 17, 17,
	gPlayerSequenceDoubleSwing, 17, 17,
	gPlayerSequenceDoubleSwing, 17, 17,
};

//D2Common.0x6FDDF450
D2AnimSeqTxt gPlayerSequenceLightning[19] =
{
	{ 0, PLRMODE_CAST, 0, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_CAST, 1, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_CAST, 3, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_CAST, 4, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_CAST, 5, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_CAST, 7, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_CAST, 8, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_CAST, 9, 0, ANIMSEQ_EVENT_MELEE_ATTACK },
	{ 0, PLRMODE_CAST, 9, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_CAST, 9, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_CAST, 9, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_CAST, 10, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_CAST, 9, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_CAST, 9, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_CAST, 9, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_CAST, 10, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_CAST, 11, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_CAST, 12, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_CAST, 13, 0, ANIMSEQ_EVENT_NONE },
};

//D2Common.0x6FDDF4C8
D2PlayerWeaponSequencesStrc gPlayerWeaponsSequenceLightning =
{
	gPlayerSequenceLightning, 19, 19,
	gPlayerSequenceLightning, 19, 19,
	gPlayerSequenceLightning, 19, 19,
	gPlayerSequenceLightning, 19, 19,
	gPlayerSequenceLightning, 19, 19,
	gPlayerSequenceLightning, 19, 19,
	gPlayerSequenceLightning, 19, 19,
	gPlayerSequenceLightning, 19, 19,
	gPlayerSequenceLightning, 19, 19,
	gPlayerSequenceLightning, 19, 19,
	gPlayerSequenceLightning, 19, 19,
	gPlayerSequenceLightning, 19, 19,
	gPlayerSequenceLightning, 19, 19,
	gPlayerSequenceLightning, 19, 19,
};

//D2Common.0x6FDDF570
D2AnimSeqTxt gPlayerSequenceLeap[15] =
{
	{ 0, PLRMODE_SPECIAL1, 0, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 1, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 2, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 3, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 4, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 5, 0, ANIMSEQ_EVENT_MELEE_ATTACK },
	{ 0, PLRMODE_SPECIAL1, 6, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 7, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 8, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 9, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 10, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 11, 0, ANIMSEQ_EVENT_MELEE_ATTACK },
	{ 0, PLRMODE_SPECIAL1, 12, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 13, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 14, 0, ANIMSEQ_EVENT_MELEE_ATTACK },
};

//D2Common.0x6FDDF5D0
D2PlayerWeaponSequencesStrc gPlayerWeaponsSequenceLeap =
{
	gPlayerSequenceLeap, 15, 15,
	gPlayerSequenceLeap, 15, 15,
	gPlayerSequenceLeap, 15, 15,
	gPlayerSequenceLeap, 15, 15,
	gPlayerSequenceLeap, 15, 15,
	gPlayerSequenceLeap, 15, 15,
	gPlayerSequenceLeap, 15, 15,
	gPlayerSequenceLeap, 15, 15,
	gPlayerSequenceLeap, 15, 15,
	gPlayerSequenceLeap, 15, 15,
	gPlayerSequenceLeap, 15, 15,
	gPlayerSequenceLeap, 15, 15,
	gPlayerSequenceLeap, 15, 15,
	gPlayerSequenceLeap, 15, 15,
};

//D2Common.0x6FDDF678
D2AnimSeqTxt gPlayerSequenceLeapAttack_HTH[22] =
{
	{ 0, PLRMODE_SPECIAL1, 0, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 1, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 2, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 3, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 4, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 5, 0, ANIMSEQ_EVENT_MELEE_ATTACK },
	{ 0, PLRMODE_SPECIAL1, 6, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 7, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 8, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 9, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 10, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 11, 0, ANIMSEQ_EVENT_MELEE_ATTACK },
	{ 0, PLRMODE_SPECIAL1, 12, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 13, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 14, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 5, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 6, 0, ANIMSEQ_EVENT_MELEE_ATTACK },
	{ 0, PLRMODE_ATTACK1, 7, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 8, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 9, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 10, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 11, 0, ANIMSEQ_EVENT_NONE },
};

//D2Common.0x6FDDF700
D2AnimSeqTxt gPlayerSequenceLeapAttack_BOW_1HT[25] =
{
	{ 0, PLRMODE_SPECIAL1, 0, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 1, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 2, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 3, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 4, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 5, 0, ANIMSEQ_EVENT_MELEE_ATTACK },
	{ 0, PLRMODE_SPECIAL1, 6, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 7, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 8, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 9, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 10, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 11, 0, ANIMSEQ_EVENT_MELEE_ATTACK },
	{ 0, PLRMODE_SPECIAL1, 12, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 13, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 14, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 6, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 7, 0, ANIMSEQ_EVENT_MELEE_ATTACK },
	{ 0, PLRMODE_ATTACK1, 8, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 9, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 10, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 11, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 12, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 13, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 14, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 15, 0, ANIMSEQ_EVENT_NONE },
};

//D2Common.0x6FDDF798
D2AnimSeqTxt gPlayerSequenceLeapAttack_1HS_XBW[28] =
{
	{ 0, PLRMODE_SPECIAL1, 0, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 1, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 2, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 3, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 4, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 5, 0, ANIMSEQ_EVENT_MELEE_ATTACK },
	{ 0, PLRMODE_SPECIAL1, 6, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 7, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 8, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 9, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 10, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 11, 0, ANIMSEQ_EVENT_MELEE_ATTACK },
	{ 0, PLRMODE_SPECIAL1, 12, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 13, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 14, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 6, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 7, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 8, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 9, 0, ANIMSEQ_EVENT_MELEE_ATTACK },
	{ 0, PLRMODE_ATTACK1, 10, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 11, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 12, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 13, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 14, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 15, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 16, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 17, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 18, 0, ANIMSEQ_EVENT_NONE },
};

//D2Common.0x6FDDF840
D2AnimSeqTxt gPlayerSequenceLeapAttack_STF[27] =
{
	{ 0, PLRMODE_SPECIAL1, 0, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 1, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 2, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 3, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 4, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 5, 0, ANIMSEQ_EVENT_MELEE_ATTACK },
	{ 0, PLRMODE_SPECIAL1, 6, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 7, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 8, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 9, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 10, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 11, 0, ANIMSEQ_EVENT_MELEE_ATTACK },
	{ 0, PLRMODE_SPECIAL1, 12, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 13, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 14, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 6, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 7, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 8, 0, ANIMSEQ_EVENT_MELEE_ATTACK },
	{ 0, PLRMODE_ATTACK1, 9, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 10, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 11, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 12, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 13, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 14, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 15, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 16, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK1, 17, 0, ANIMSEQ_EVENT_NONE },
};

//D2Common.0x6FDDF8E8
D2PlayerWeaponSequencesStrc gPlayerWeaponsSequenceLeapAttack =
{
	gPlayerSequenceLeapAttack_HTH, 22, 22,
	gPlayerSequenceLeapAttack_BOW_1HT, 25, 25,
	gPlayerSequenceLeapAttack_1HS_XBW, 28, 28,
	gPlayerSequenceLeapAttack_BOW_1HT, 25, 25,
	gPlayerSequenceLeapAttack_STF, 27, 27,
	0, 0, 0,
	0, 0, 0,
	gPlayerSequenceLeapAttack_1HS_XBW, 28, 28,
	gPlayerSequenceLeapAttack_HTH, 22, 22,
	gPlayerSequenceLeapAttack_HTH, 22, 22,
	gPlayerSequenceLeapAttack_HTH, 22, 22,
	gPlayerSequenceLeapAttack_HTH, 22, 22,
	gPlayerSequenceLeapAttack_HTH, 22, 22,
	gPlayerSequenceLeapAttack_HTH, 22, 22,
};

//D2Common.0x6FDDF990
D2AnimSeqTxt gPlayerSequenceDoubleThrow[12] =
{
	{ 0, PLRMODE_THROW, 2, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_THROW, 3, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_THROW, 4, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_THROW, 6, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_THROW, 7, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_THROW, 8, 0, ANIMSEQ_EVENT_MELEE_ATTACK },
	{ 0, PLRMODE_SPECIAL3, 2, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL3, 4, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL3, 5, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL3, 7, 0, ANIMSEQ_EVENT_MELEE_ATTACK },
	{ 0, PLRMODE_SPECIAL3, 8, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL3, 10, 0, ANIMSEQ_EVENT_NONE },
};

//D2Common.0x6FDDF9D8
D2PlayerWeaponSequencesStrc gPlayerWeaponsSequenceDoubleThrow =
{
	gPlayerSequenceDoubleThrow, 12, 12,
	gPlayerSequenceDoubleThrow, 12, 12,
	gPlayerSequenceDoubleThrow, 12, 12,
	gPlayerSequenceDoubleThrow, 12, 12,
	gPlayerSequenceDoubleThrow, 12, 12,
	gPlayerSequenceDoubleThrow, 12, 12,
	gPlayerSequenceDoubleThrow, 12, 12,
	gPlayerSequenceDoubleThrow, 12, 12,
	gPlayerSequenceDoubleThrow, 12, 12,
	gPlayerSequenceDoubleThrow, 12, 12,
	gPlayerSequenceDoubleThrow, 12, 12,
	gPlayerSequenceDoubleThrow, 12, 12,
	gPlayerSequenceDoubleThrow, 12, 12,
	gPlayerSequenceDoubleThrow, 12, 12,
};

//D2Common.0x6FDDFA80
D2AnimSeqTxt gPlayerSequenceDragonClaw_HTH_HT1[12] =
{
	{ 0, PLRMODE_ATTACK2, 0, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK2, 1, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK2, 2, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK2, 3, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK2, 4, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK2, 5, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK2, 6, 0, ANIMSEQ_EVENT_MELEE_ATTACK },
	{ 0, PLRMODE_ATTACK2, 7, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK2, 8, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK2, 9, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK2, 10, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK2, 11, 0, ANIMSEQ_EVENT_NONE },
};

//D2Common.0x6FDDFAC8
D2AnimSeqTxt gPlayerSequenceDragonClaw_HT2[16] =
{
	{ 0, PLRMODE_ATTACK2, 0, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK2, 1, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK2, 2, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK2, 3, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK2, 4, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK2, 5, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_ATTACK2, 6, 0, ANIMSEQ_EVENT_MELEE_ATTACK },
	{ 0, PLRMODE_SPECIAL4, 3, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL4, 4, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL4, 5, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL4, 6, 0, ANIMSEQ_EVENT_MELEE_ATTACK },
	{ 0, PLRMODE_SPECIAL4, 7, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL4, 8, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL4, 9, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL4, 10, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL4, 11, 0, ANIMSEQ_EVENT_NONE },
};

//D2Common.0x6FDDFB28
D2PlayerWeaponSequencesStrc gPlayerWeaponsSequenceDragonClaw =
{
	gPlayerSequenceDragonClaw_HTH_HT1, 12, 12,
	0, 0, 0,
	0, 0, 0,
	0, 0, 0,
	0, 0, 0,
	0, 0, 0,
	0, 0, 0,
	0, 0, 0,
	0, 0, 0,
	0, 0, 0,
	0, 0, 0,
	0, 0, 0,
	gPlayerSequenceDragonClaw_HTH_HT1, 12, 12,
	gPlayerSequenceDragonClaw_HT2, 16, 16,
};

//D2Common.0x6FDDFBD0
D2AnimSeqTxt gPlayerSequenceProjection[19] =
{
	{ 0, PLRMODE_CAST, 0, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_CAST, 1, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_CAST, 2, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_CAST, 3, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_CAST, 4, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_CAST, 5, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_CAST, 6, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_CAST, 7, 0, ANIMSEQ_EVENT_MELEE_ATTACK },
	{ 0, PLRMODE_CAST, 8, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_CAST, 9, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_CAST, 10, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_CAST, 11, 0, ANIMSEQ_EVENT_MELEE_ATTACK },
	{ 0, PLRMODE_CAST, 13, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_CAST, 14, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_CAST, 15, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_CAST, 16, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_CAST, 17, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_CAST, 18, 0, ANIMSEQ_EVENT_MELEE_ATTACK },
	{ 0, 0, 0, 0, ANIMSEQ_EVENT_NONE },
};

//D2Common.0x6FDDFC48
D2PlayerWeaponSequencesStrc gPlayerWeaponsSequenceProjection =
{
	gPlayerSequenceProjection, 19, 19,
	gPlayerSequenceProjection, 19, 19,
	gPlayerSequenceProjection, 19, 19,
	gPlayerSequenceProjection, 19, 19,
	gPlayerSequenceProjection, 19, 19,
	gPlayerSequenceProjection, 19, 19,
	gPlayerSequenceProjection, 19, 19,
	gPlayerSequenceProjection, 19, 19,
	0, 0, 0,
	0, 0, 0,
	0, 0, 0,
	0, 0, 0,
	gPlayerSequenceProjection, 19, 19,
	gPlayerSequenceProjection, 19, 19,
};

//D2Common.0x6FDDFCF0
D2AnimSeqTxt gPlayerSequenceDragonTalon[20] =
{
	{ 0, PLRMODE_KICK, 0, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_KICK, 1, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_KICK, 2, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_KICK, 3, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_KICK, 4, 0, ANIMSEQ_EVENT_MELEE_ATTACK },
	{ 0, PLRMODE_KICK, 5, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_KICK, 2, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_KICK, 3, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_KICK, 4, 0, ANIMSEQ_EVENT_MELEE_ATTACK },
	{ 0, PLRMODE_KICK, 5, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_KICK, 2, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_KICK, 3, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_KICK, 4, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_KICK, 5, 0, ANIMSEQ_EVENT_MELEE_ATTACK },
	{ 0, PLRMODE_KICK, 6, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_KICK, 7, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_KICK, 8, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_KICK, 9, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_KICK, 10, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_KICK, 11, 0, ANIMSEQ_EVENT_NONE },
};

//D2Common.0x6FDDFD68
D2PlayerWeaponSequencesStrc gPlayerWeaponsSequenceDragonTalon =
{
	gPlayerSequenceDragonTalon, 20, 20,
	gPlayerSequenceDragonTalon, 20, 20,
	gPlayerSequenceDragonTalon, 20, 20,
	gPlayerSequenceDragonTalon, 20, 20,
	gPlayerSequenceDragonTalon, 20, 20,
	gPlayerSequenceDragonTalon, 20, 20,
	gPlayerSequenceDragonTalon, 20, 20,
	gPlayerSequenceDragonTalon, 20, 20,
	0, 0, 0,
	0, 0, 0,
	0, 0, 0,
	0, 0, 0,
	gPlayerSequenceDragonTalon, 20, 20,
	gPlayerSequenceDragonTalon, 20, 20,
};

//D2Common.0x6FDDFE10
D2AnimSeqTxt gPlayerSequenceArcticBlast[15] =
{
	{ 0, PLRMODE_SPECIAL1, 0, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 1, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 2, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 3, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 4, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 5, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 6, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 7, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 8, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 9, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 9, 0, ANIMSEQ_EVENT_MELEE_ATTACK },
	{ 0, PLRMODE_SPECIAL1, 10, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 11, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 12, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 13, 0, ANIMSEQ_EVENT_NONE },
};

//D2Common.0x6FDDFE70
D2PlayerWeaponSequencesStrc gPlayerWeaponsSequenceArcticBlast =
{
	gPlayerSequenceArcticBlast, 15, 15,
	gPlayerSequenceArcticBlast, 15, 15,
	gPlayerSequenceArcticBlast, 15, 15,
	gPlayerSequenceArcticBlast, 15, 15,
	gPlayerSequenceArcticBlast, 15, 15,
	gPlayerSequenceArcticBlast, 15, 15,
	gPlayerSequenceArcticBlast, 15, 15,
	gPlayerSequenceArcticBlast, 15, 15,
	gPlayerSequenceArcticBlast, 15, 15,
	gPlayerSequenceArcticBlast, 15, 15,
	gPlayerSequenceArcticBlast, 15, 15,
	gPlayerSequenceArcticBlast, 15, 15,
	gPlayerSequenceArcticBlast, 15, 15,
	gPlayerSequenceArcticBlast, 15, 15,
};

//D2Common.0x6FDDFF18
D2AnimSeqTxt gPlayerSequenceDragonBreath[17] =
{
	{ 0, PLRMODE_SPECIAL1, 0, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 1, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 2, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 3, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 4, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 5, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 6, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 7, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 8, 0, ANIMSEQ_EVENT_MELEE_ATTACK },
	{ 0, PLRMODE_SPECIAL1, 9, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 10, 0, ANIMSEQ_EVENT_MELEE_ATTACK },
	{ 0, PLRMODE_SPECIAL1, 11, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 12, 0, ANIMSEQ_EVENT_MELEE_ATTACK },
	{ 0, PLRMODE_SPECIAL1, 12, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 13, 0, ANIMSEQ_EVENT_MELEE_ATTACK },
	{ 0, PLRMODE_SPECIAL1, 13, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 14, 0, ANIMSEQ_EVENT_NONE },
};

//D2Common.0x6FDDFF80
D2PlayerWeaponSequencesStrc gPlayerWeaponsSequenceDragonBreath =
{
	gPlayerSequenceDragonBreath, 17, 17,
	gPlayerSequenceDragonBreath, 17, 17,
	gPlayerSequenceDragonBreath, 17, 17,
	gPlayerSequenceDragonBreath, 17, 17,
	gPlayerSequenceDragonBreath, 17, 17,
	gPlayerSequenceDragonBreath, 17, 17,
	gPlayerSequenceDragonBreath, 17, 17,
	0, 0, 0,
	0, 0, 0,
	0, 0, 0,
	0, 0, 0,
	0, 0, 0,
	gPlayerSequenceDragonBreath, 17, 17,
	gPlayerSequenceDragonBreath, 17, 17,
};

//D2Common.0x6FDE0028
D2AnimSeqTxt gPlayerSequenceDragonFlight[23] =
{
	{ 0, PLRMODE_CAST, 0, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_CAST, 1, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_CAST, 2, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_CAST, 3, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_CAST, 4, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_CAST, 5, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_CAST, 6, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_CAST, 7, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_CAST, 8, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_CAST, 9, 0, ANIMSEQ_EVENT_MELEE_ATTACK },
	{ 0, PLRMODE_KICK, 0, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_KICK, 1, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_KICK, 2, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_KICK, 3, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_KICK, 4, 0, ANIMSEQ_EVENT_MELEE_ATTACK },
	{ 0, PLRMODE_KICK, 5, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_KICK, 6, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_KICK, 7, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_KICK, 8, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_KICK, 9, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_KICK, 10, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_KICK, 11, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_KICK, 12, 0, ANIMSEQ_EVENT_NONE },
};

//D2Common.0x6FDE00B8
D2PlayerWeaponSequencesStrc gPlayerWeaponsSequenceDragonFlight =
{
	gPlayerSequenceDragonFlight, 23, 23,
	gPlayerSequenceDragonFlight, 23, 23,
	gPlayerSequenceDragonFlight, 23, 23,
	gPlayerSequenceDragonFlight, 23, 23,
	gPlayerSequenceDragonFlight, 23, 23,
	gPlayerSequenceDragonFlight, 23, 23,
	gPlayerSequenceDragonFlight, 23, 23,
	gPlayerSequenceDragonFlight, 23, 23,
	gPlayerSequenceDragonFlight, 23, 23,
	gPlayerSequenceDragonFlight, 23, 23,
	gPlayerSequenceDragonFlight, 23, 23,
	gPlayerSequenceDragonFlight, 23, 23,
	gPlayerSequenceDragonFlight, 23, 23,
	gPlayerSequenceDragonFlight, 23, 23,
};

//D2Common.0x6FDE0160
D2AnimSeqTxt gPlayerSequenceUnmorph[16] =
{
	{ 0, PLRMODE_SPECIAL1, 15, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 14, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 13, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 12, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 11, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 10, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 9, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 8, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 7, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 6, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 5, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 4, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 3, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 2, 0, ANIMSEQ_EVENT_MELEE_ATTACK },
	{ 0, PLRMODE_SPECIAL1, 1, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_SPECIAL1, 0, 0, ANIMSEQ_EVENT_NONE },
};

//D2Common.0x6FDE01C0
D2PlayerWeaponSequencesStrc gPlayerWeaponsSequenceUnmorph =
{
	gPlayerSequenceUnmorph, 16, 16,
	gPlayerSequenceUnmorph, 16, 16,
	gPlayerSequenceUnmorph, 16, 16,
	gPlayerSequenceUnmorph, 16, 16,
	gPlayerSequenceUnmorph, 16, 16,
	gPlayerSequenceUnmorph, 16, 16,
	gPlayerSequenceUnmorph, 16, 16,
	gPlayerSequenceUnmorph, 16, 16,
	gPlayerSequenceUnmorph, 16, 16,
	gPlayerSequenceUnmorph, 16, 16,
	gPlayerSequenceUnmorph, 16, 16,
	gPlayerSequenceUnmorph, 16, 16,
	gPlayerSequenceUnmorph, 16, 16,
	gPlayerSequenceUnmorph, 16, 16,
};

//D2Common.0x6FDE0268
D2AnimSeqTxt gPlayerSequenceBladeFury[19] =
{
	{ 0, PLRMODE_CAST, 0, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_CAST, 1, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_CAST, 2, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_CAST, 3, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_CAST, 4, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_CAST, 5, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_CAST, 6, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_CAST, 7, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_CAST, 8, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_CAST, 9, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_CAST, 9, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_CAST, 9, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_CAST, 10, 0, ANIMSEQ_EVENT_MELEE_ATTACK },
	{ 0, PLRMODE_CAST, 11, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_CAST, 12, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_CAST, 13, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_CAST, 14, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_CAST, 15, 0, ANIMSEQ_EVENT_NONE },
	{ 0, PLRMODE_CAST, 16, 0, ANIMSEQ_EVENT_NONE },
};

//D2Common.0x6FDE02E0
D2PlayerWeaponSequencesStrc gPlayerWeaponsSequenceBladeFury =
{
	gPlayerSequenceBladeFury, 19, 19,
	gPlayerSequenceBladeFury, 19, 19,
	gPlayerSequenceBladeFury, 19, 19,
	gPlayerSequenceBladeFury, 19, 19,
	gPlayerSequenceBladeFury, 19, 19,
	gPlayerSequenceBladeFury, 19, 19,
	gPlayerSequenceBladeFury, 19, 19,
	gPlayerSequenceBladeFury, 19, 19,
	gPlayerSequenceBladeFury, 19, 19,
	gPlayerSequenceBladeFury, 19, 19,
	gPlayerSequenceBladeFury, 19, 19,
	gPlayerSequenceBladeFury, 19, 19,
	gPlayerSequenceBladeFury, 19, 19,
	gPlayerSequenceBladeFury, 19, 19,
};

//D2Common.0x6FDE0388
D2PlayerWeaponSequencesStrc* gPlayerWeaponsSequenceTable[24] =
{
	NULL,
	&gPlayerWeaponsSequenceJab,
	&gPlayerWeaponsSequenceSacrifice,
	&gPlayerWeaponsSequenceChastise,
	&gPlayerWeaponsSequenceCharge,
	&gPlayerWeaponsSequenceDefiance,
	&gPlayerWeaponsSequenceInferno,
	&gPlayerWeaponsSequenceStrafe,
	&gPlayerWeaponsSequenceImpale,
	&gPlayerWeaponsSequenceFend,
	&gPlayerWeaponsSequenceWhirlwind,
	&gPlayerWeaponsSequenceDoubleSwing,
	&gPlayerWeaponsSequenceLightning,
	&gPlayerWeaponsSequenceLeap,
	&gPlayerWeaponsSequenceLeapAttack,
	&gPlayerWeaponsSequenceDoubleThrow,
	&gPlayerWeaponsSequenceDragonClaw,
	&gPlayerWeaponsSequenceProjection,
	&gPlayerWeaponsSequenceArcticBlast,
	&gPlayerWeaponsSequenceDragonTalon,
	&gPlayerWeaponsSequenceDragonBreath,
	&gPlayerWeaponsSequenceDragonFlight,
	&gPlayerWeaponsSequenceUnmorph,
	&gPlayerWeaponsSequenceBladeFury,
};

//D2Common.0x6FDE03E8
//Note: This should really just be an array since the indices are ordered anyway...
static const int gWeaponIndexToClassMap[NUM_WEAPON_CLASSES][2] =
{
	{ 0, WEAPONCLASS_HTH },
	{ 1, WEAPONCLASS_1HT },
	{ 2, WEAPONCLASS_2HT },
	{ 3, WEAPONCLASS_1HS },
	{ 4, WEAPONCLASS_2HS },
	{ 5, WEAPONCLASS_BOW },
	{ 6, WEAPONCLASS_XBW },
	{ 7, WEAPONCLASS_STF },
	{ 8, WEAPONCLASS_1JS },
	{ 9, WEAPONCLASS_1JT },
	{ 10, WEAPONCLASS_1SS },
	{ 11, WEAPONCLASS_1ST },
	{ 12, WEAPONCLASS_HT1 },
	{ 13, WEAPONCLASS_HT2 }
};



//D2Common.0x6FD727A0 (#10682)
D2AnimSeqTxt* __stdcall DATATBLS_GetMonSeqTxtRecordFromUnit(D2UnitStrc* pUnit)
{
	D2AnimSeqRecordStrc* pSeqRecord = DATATBLS_GetSeqRecordFromUnit(pUnit);
	if (pSeqRecord)
	{
		return pSeqRecord->pAnimSeqTxtRecord;
	}

	return NULL;
}

//D2Common.0x6FD727C0
D2AnimSeqRecordStrc* __fastcall DATATBLS_GetSeqRecordFromUnit(D2UnitStrc* pUnit)
{
	if (D2SkillStrc* pSkill = UNITS_GetUsedSkill(pUnit))
	{
		int nSequenceNum = SKILLS_GetSeqNumFromSkill(pUnit, pSkill);

		if (nSequenceNum > 0)
		{
			int nUnitType = UNIT_TYPES_COUNT;
			if (pUnit)
			{
				nUnitType = pUnit->dwUnitType;
			}

			if (nUnitType == UNIT_PLAYER)
			{
				int nWeaponClass = WEAPONCLASS_HTH;
				COMPOSIT_GetWeaponClassId(pUnit, pUnit->pInventory, &nWeaponClass, -1, TRUE);

				int nWClassIndex = -1;
				for (int i = 0; i < NUM_WEAPON_CLASSES; i++)
				{
					if (nWeaponClass == gWeaponIndexToClassMap[i][1])
					{
						nWClassIndex = gWeaponIndexToClassMap[i][0];
						break;
					}
				}

				D2_ASSERT(nWClassIndex != -1);

				return &gPlayerWeaponsSequenceTable[nSequenceNum]->weaponRecords[nWClassIndex];
			}
			else if (nUnitType == UNIT_MONSTER && DATATBLS_GetMonStatsTxtRecord(pUnit->dwClassId))
			{
				return DATATBLS_GetMonSeqTableRecord(nSequenceNum);
			}
		}
	}

	return nullptr;
}

//D2Common.0x6FD728A0 (#10683)
int __stdcall DATATBLS_GetSeqFramePointsCount(D2UnitStrc* pUnit)
{
	D2AnimSeqRecordStrc* pSeqRecord = DATATBLS_GetSeqRecordFromUnit(pUnit);
	if (pSeqRecord)
	{
		return (pSeqRecord->nSeqFramesCount << 8);
	}

	return 0;
}

//D2Common.0x6FD728C0 (#10684)
int __stdcall DATATBLS_GetSeqFrameCount(D2UnitStrc* pUnit)
{
	D2AnimSeqRecordStrc* pSeqRecord = DATATBLS_GetSeqRecordFromUnit(pUnit);
	if (pSeqRecord)
	{
		return pSeqRecord->nFramesCount;
	}

	return 0;
}

//D2Common.0x6FD728E0 (#10685)
void __stdcall DATATBLS_ComputeSequenceAnimation(D2AnimSeqTxt* pMonSeqTxt, int nTargetFramePoint, int nCurrentFramePoint, unsigned int* pMode, unsigned int* pFrame, int* pDirection, int* pEvent)
{
	if (pMonSeqTxt)
	{
		const D2AnimSeqTxt* pMonSeqTxtRecord = &pMonSeqTxt[nTargetFramePoint >> 8];

		*pMode = pMonSeqTxtRecord->nMode;
		*pFrame = pMonSeqTxtRecord->nFrame;
		*pDirection = pMonSeqTxtRecord->nDir;

		if (nCurrentFramePoint == nTargetFramePoint)
		{
			*pEvent = pMonSeqTxtRecord->nEvent;
		}
		else // Retrieve the last event, note that it discard the intermediary events.
		{
			*pEvent = 0;
			const int nNextFrame = (nCurrentFramePoint >> 8) + 1;
			const int nTargetFrame = nTargetFramePoint >> 8;
			for (int frameIdx = nNextFrame; frameIdx <= nTargetFrame; frameIdx++)
			{
				const D2AnimSeqEvent nEvent = pMonSeqTxt[frameIdx].nEvent;
				if (nEvent != ANIMSEQ_EVENT_NONE)
				{
					*pEvent = nEvent;
				}
			}
		}
	}
	else
	{
		*pMode = 0;
		*pFrame = 0;
		*pDirection = 0;
		*pEvent = ANIMSEQ_EVENT_NONE;
	}
}

//D2Common.0x6FD72990 (#10686)
void __stdcall DATATBLS_GetSequenceEvent(D2AnimSeqTxt* pMonSeqTxt, int nSeqFramePoint, int* pEvent)
{
	if (pMonSeqTxt)
	{
		*pEvent = pMonSeqTxt[nSeqFramePoint >> 8].nEvent;
	}
	else
	{
		*pEvent = 0;
	}
}

//D2Common.0x6FD6F050
void __fastcall DATATBLS_LoadMonSeqTxt(HD2ARCHIVE hArchive)
{
	D2BinFieldStrc pTbl[] =
	{
		{ "sequence", TXTFIELD_NAMETOINDEX, 0, 0, &sgptDataTables->pMonSeqLinker },
		{ "mode", TXTFIELD_CODETOBYTE, 0, 2, &sgptDataTables->pMonModeLinker },
		{ "frame", TXTFIELD_BYTE, 0, 3, NULL },
		{ "dir", TXTFIELD_BYTE, 0, 4, NULL },
		{ "event", TXTFIELD_BYTE, 0, 5, NULL },
		{ "end", TXTFIELD_NONE, 0, 0, NULL },
	};

	sgptDataTables->pMonSeqLinker = (D2TxtLinkStrc*)FOG_AllocLinker(__FILE__, __LINE__);
	sgptDataTables->pMonSeqTxt = (D2AnimSeqTxt*)DATATBLS_CompileTxt(hArchive, "monseq", pTbl, &sgptDataTables->nMonSeqTxtRecordCount, sizeof(D2AnimSeqTxt));

	if (sgptDataTables->nMonSeqTxtRecordCount > 0)
	{
		sgptDataTables->nMonSeqTableRecordCount = sgptDataTables->pMonSeqTxt[sgptDataTables->nMonSeqTxtRecordCount - 1].wSequence + 1;
		sgptDataTables->pMonSeqTable = (D2AnimSeqRecordStrc*)D2_CALLOC_POOL(NULL, sizeof(D2AnimSeqRecordStrc) * sgptDataTables->nMonSeqTableRecordCount);
		
		for (int i = 0; i < sgptDataTables->nMonSeqTxtRecordCount; ++i)
		{
			int nSequence = sgptDataTables->pMonSeqTxt[i].wSequence;
			if (!sgptDataTables->pMonSeqTable[nSequence].pAnimSeqTxtRecord)
			{
				sgptDataTables->pMonSeqTable[nSequence].pAnimSeqTxtRecord = &sgptDataTables->pMonSeqTxt[i];
			}

			++sgptDataTables->pMonSeqTable[nSequence].nSeqFramesCount;
			++sgptDataTables->pMonSeqTable[nSequence].nFramesCount;
		}
	}
}

//D2Common.0x6FD6F200 (#11262)
D2AnimSeqRecordStrc* __stdcall DATATBLS_GetMonSeqTableRecord(int nSequence)
{
	if (nSequence >= 0 && nSequence < sgptDataTables->nMonSeqTableRecordCount)
	{
		return &sgptDataTables->pMonSeqTable[nSequence];
	}

	return NULL;
}